/*******************************************
  Jose Andres Lara Vecino

  Author       : $Author: cainlara@gmail.com $
  Last CheckIn : $Date: 2012-10-29 19:04:52 +0000 (Mon, 29 Oct 2012) $
  Revision     : $Revision: 108 $
*******************************************/

package seguridad;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;

import utilidad.Util;
import api.IUsuarioAPI;
import control.App;
import core.ManejadorLog;
import frente.Usuario;

/**
 * Clase encargada de administrar el acceso a la aplicacion.
 *  
 * @author jose.lara 07.06.2012
 */
public final class Seguridad {
    
    private Seguridad() {
        //Imposible instanciar
    }
    public static boolean claveValida(char[] claveUsuario, Usuario usuario, boolean encriptada) {
        String clave                    = null;
        
        clave = String.valueOf(claveUsuario);
        
        return claveValida(clave, usuario, encriptada);
    }
    
    public static boolean claveValida(String claveUsuario, Usuario usuario, boolean encriptada) {
        String claveMD5                 = null;
        String claveEncriptadaUsuario   = null;
        
        try {
            if(usuario != null && claveUsuario != null) {
                claveEncriptadaUsuario = usuario.getClave();
                if(encriptada) {
                    claveMD5 = claveUsuario;
                }
                else {
                    claveMD5 = Util.getMD5(claveUsuario);
                }
            }
        }
        catch(NoSuchAlgorithmException nsae) {
            ManejadorLog.escribirErrorEnLog(nsae);
        }
        catch (UnsupportedEncodingException e) {
            ManejadorLog.escribirErrorEnLog(e);
        }
        
        return claveMD5 != null && claveMD5.equals(claveEncriptadaUsuario);
    }
    
    public static boolean iniciarSesion(String nombreUsuario, char[] clave, boolean guardarDatos, boolean encriptada) throws IOException {
        return iniciarSesion(nombreUsuario, String.valueOf(clave), guardarDatos, encriptada);
        
    }
    
    public static boolean iniciarSesion(String nombreUsuario, String clave, boolean guardarDatos, boolean encriptada) throws IOException {
        IUsuarioAPI usuariosAPI = null;
        
        usuariosAPI = App.getSesion().getUsuarioAPI();
        
        Usuario usuario = usuariosAPI.getUsuario(nombreUsuario);
        
        if(usuario != null && claveValida(clave, usuario, encriptada)) {
            App.iniciarSesion(usuario, guardarDatos);
            return true;
        }
        
        return false;
    }
}
